#ifndef G_FAT12_H
#define G_FAT12_H
#include <stdio.h>

//1个字节对齐
#pragma pack(1)
struct FAT12_Header{
  unsigned char BS_JmpBoot[3];//跳转指令
  unsigned char BS_OEMName[8];//OEM字符串，必须为8个字符 不足用空格填充
  short BPB_BytsPerSec;//每个扇区的字节数
  unsigned char BPB_SecPerClus;//没簇占用的扇区数
  short BPB_RsvdSecCnt; //Boot占用的扇区数
  unsigned char BPB_NumFats;//fat表的记录数
  short BPB_RootEntCnt; //最大根目录文件数
  short BPB_TotSec16; //逻辑扇区总数
  unsigned char BPB_Media;//媒体描述符
  short BPB_FATSz16; //每个Fat 占用的扇区数
  short BPB_SECPerTrk;//每个磁道扇区数
  short BPB_NumHeads;//磁头数
  int BPB_HiddSec;//隐藏扇区数
  int BPB_ToSec32;//如果BPB_TotSec16是0,则这里记录扇区总数
  unsigned char BS_DrvNum; //中断13的驱动器号
  unsigned char BS_Reserved1;//未使用
  unsigned char BS_BootSig;//扩展引导标志
  int BS_VOLID;//卷序列号
  unsigned char BS_VOILab[11];//卷标 必须是11个字符 不足以空格填充
  char BS_FileSysType[8];//文件系统类型 必须是8个字符,不足填充空格
  unsigned char BOOT_Code[448];//引导代码 由偏移0字节处的短跳转而来
  short END;//系统引导标志 0x55 0xAA
}FAT12_Header;
#pragma pack()


#pragma pack(1)
struct FAT12_DIR{
  char Dir_Name[0xb];//文件名8字节 扩展名3个字节
  char Dir_Attr;//文件属性
  char Reserve[0x0A];//保留位
  short Dir_wrtTime;//最后一次写入时间
  short Dir_WrtDate;//最后一次写入日期
  short Dir_FstClus;//文件开始的簇号 偏移量
  int Dir_FileSize;//文件大小

}FAT12_DIR;
#pragma pack()

#endif

